package Negocio;

import ManejoExc.EmpresaException;
import Ordenamiento.FechaComparator;
import Ordenamiento.PersonalComparator;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Diego
 * @version 1.0
 * @created 28-sep-2013 21:38:50 p.m.
 */
public class Parcela {

    private Integer idParcela;
    private int NroParcela;
    private String descripcion;
    private List<Aplicacion> aplicaciones;
    private Plantacion plantacion;

    //Constructores
    public Parcela() {

    }

    public Parcela(int NroParcela, String descripcion) {
        this.descripcion = descripcion;
        this.NroParcela = NroParcela;
        this.aplicaciones = new LinkedList();
        Empresa.persistencia.insert(this);

    }

    //Set & Get
    public List<Aplicacion> getAplicaciones() {
        return aplicaciones;
    }

    public void setAplicaciones(List<Aplicacion> aplicaciones) {
        this.aplicaciones = aplicaciones;
    }

    public Integer getIdParcela() {
        return idParcela;
    }

    public void setIdParcela(Integer idParcela) {
        this.idParcela = idParcela;
    }

    public int getNroParcela() {
        return NroParcela;
    }

    public void setNroParcela(int NroParcela) {
        this.NroParcela = NroParcela;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void actualizar(int nro, String descripcion) {
        this.NroParcela = nro;
        this.descripcion = descripcion;
        Empresa.persistencia.update(this);

    }

    public void quitar() {
        Empresa.persistencia.delete(this);
    }

    @Override
    public String toString() {
        return "Parcela N°" + this.getNroParcela();
    }

    public void agregarAplicacion(Aplicacion unaAplicacion) {
        this.aplicaciones.add(unaAplicacion);
        Empresa.persistencia.update(this);
    }

    public void quitarAplicacion(Aplicacion unaAplicacion) {
        this.aplicaciones.remove(unaAplicacion);
        Empresa.persistencia.update(this);
    }

    public List ordenarAplicaciones(int orden) {
        List<Aplicacion> aux = new LinkedList();
        switch (orden) {
            case 1:
                Collections.sort(this.aplicaciones, new FechaComparator());
                break;
            case 2:
                Collections.sort(this.aplicaciones, new PersonalComparator());
                break;
        }
        return aux;
    }

    public Aplicacion obtenerAplicacion(Integer unId) throws EmpresaException {
        Aplicacion unaAplicacion = null;
        boolean flag = true;
        Iterator it = this.getAplicaciones().iterator();
        while (it.hasNext() & flag) {
            unaAplicacion = (Aplicacion) it.next();
            flag = false;
        }

        if (flag) {
            throw new EmpresaException("Aplicacion No encontrada");
        }
        return unaAplicacion;
    }

    public void borrarAplicacion(Aplicacion unaAplicacion) {
        this.aplicaciones.remove(unaAplicacion);
        unaAplicacion.borrar();
        Empresa.persistencia.update(this);

    }

    public Plantacion getPlantacion() {
        return plantacion;
    }

    public void setPlantacion(Plantacion plantacion) {
        this.plantacion = plantacion;
    }

}
